AWS 3 Tier Architecture
使用說明
建置架構
目錄結構
three_tier
├── main.tf
└── vpc
├── igw.tf
├── route_Private.tf
├── route_Public.tf
├── subnet_Private.tf
├── subnet_Public.tf
├── variable.tf
└── versions.tf
組態檔內容
main.tf
#Define provider
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}
provider "aws" {
region = "us-east-1"
}
# 這里可以定義主模塊的其他資源和配置
# 例如,你可以在這里定義 EC2 實例、RDS 資料庫 等其他 AWS 資源
# 引用 vpc 子模塊
module "vpc" {
source = "./vpc" # 指定 vpc 子模塊的路徑。
}
variables.tf
##########################
##### VPC CIDR Block #####
##########################
variable "vpc_cidr" {
default = "10.0.0.0/16"
description = "VPC_cidr block"
type = string
}
##################
##### Subnet #####
##################
variable "public-subnet1" {
default = "10.0.1.0/24"
description = "public-subnet-A"
type = string
}
variable "public-subnet2" {
default = "10.0.2.0/24"
description = "public-subnet-B"
type = string
}
variable "private-subnet1" {
default = "10.0.3.0/24"
description = "private-subnet-A"
type = string
}
variable "private-subnet2" {
default = "10.0.4.0/24"
description = "private-subnet-B"
type = string
}
vpc.tf
#VPC
resource "aws_vpc" "vpc-block" {
cidr_block = var.vpc_cidr
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "tf-test-vpc"
}
}
## output
output "vpc_id" {
value = aws_vpc.vpc-block.tags["Name"]
}
subnet_Public.tf
#2 Public Subnets
resource "aws_subnet" "public-subnet1" {
tags = {
Name = "tf-test-PublicSubnet-A" # 子網的名稱
}
vpc_id = aws_vpc.vpc-block.id
cidr_block = var.public-subnet1
availability_zone = "us-east-1a"
}
resource "aws_subnet" "public-subnet2" {
tags = {
Name = "tf-test-PublicSubnet-B" # 子網的名稱
}
vpc_id = aws_vpc.vpc-block.id
cidr_block = var.public-subnet2
availability_zone = "us-east-1b"
}
## Output
output "public-subnet1_name" {
value = aws_subnet.public-subnet1.tags["Name"]
}
output "public-subnet2_name" {
value = aws_subnet.public-subnet2.tags["Name"]
}
subnet_Private.tf
# Private Subnets
resource "aws_subnet" "private-subnet1" {
tags = {
Name = "tf-test-PrivateSubnet-A" # 子網的名稱
}
vpc_id = aws_vpc.vpc-block.id
cidr_block = var.private-subnet1
availability_zone = "us-east-1a"
}
resource "aws_subnet" "private-subnet2" {
tags = {
Name = "tf-test-PrivateSubnet-B" # 子網的名稱
}
vpc_id = aws_vpc.vpc-block.id
cidr_block = var.private-subnet2
availability_zone = "us-east-1b"
}
## Output
output "private-subnet1_name" {
value = aws_subnet.private-subnet1.tags["Name"]
}
output "private-subnet2_name" {
value = aws_subnet.private-subnet2.tags["Name"]
}
route_Public.tf
# route_Public.tf
#######################
##### Route Table #####
#######################
# 創建公共路由表
resource "aws_route_table" "public-subnet-route-table" {
vpc_id = aws_vpc.vpc-block.id
tags = {
Name = "tf-test-Route-Public"
}
}
# 添加路由規則
resource "aws_route" "public-subnet-default-route" {
route_table_id = aws_route_table.public-subnet-route-table.id
destination_cidr_block = "0.0.0.0/0" # 所有流量
gateway_id = aws_internet_gateway.igw.id # 通過 Internet Gateway 出去
}
###################################
##### Route table association #####
###################################
# 將子網與路由表關聯
resource "aws_route_table_association" "public-subnet1-route-table-association" {
subnet_id = aws_subnet.public-subnet1.id
route_table_id = aws_route_table.public-subnet-route-table.id
}
resource "aws_route_table_association" "public-subnet2-route-table-association" {
subnet_id = aws_subnet.public-subnet2.id
route_table_id = aws_route_table.public-subnet-route-table.id
}
route_Private.tf
#######################
##### Route Table #####
#######################
resource "aws_route_table" "private-route-table" {
vpc_id = aws_vpc.vpc-block.id
tags = {
Name = "tf-test-Route-Private"
}
}
###################################
##### Route table association #####
###################################
# 將子網與路由表關聯
resource "aws_route_table_association" "private-subnet1-route-table-association" {
subnet_id = aws_subnet.private-subnet1.id
route_table_id = aws_route_table.private-route-table.id
}
resource "aws_route_table_association" "private-subnet2-route-table-association" {
subnet_id = aws_subnet.private-subnet2.id
route_table_id = aws_route_table.private-route-table.id
}
igw.tf
#Internet Gateway
resource "aws_internet_gateway" "gw" {
vpc_id = aws_vpc.vpc-block.id
tags = {
Name = "main"
}
}